﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AP.LUNA.DataAccess;
using AP.LUNA.DataEntities;
using AP.LUNA.Commons;
using AP.LUNA.Exceptions;

namespace AP.LUNA.BusinessLogic
{
    public class BLDesempenos : BLAstract, IBusinessLogic<desempenos>
    {
        private LunaEntities context = null;
        public BLDesempenos()
        {
            context = GetContext();
        }
        public List<desempenos> GetAll()
        {
            throw new NotImplementedException();
        }

        public List<desempenos> GetbyAsignatura(int idAsignatura)
        {
            return context.desempenos.Include("periodos").Where(d => d.IdAsignatura == idAsignatura).ToList();
        }

        public decimal GetPorcentajebyPeriodo(int periodo, int idAsignatura)
        {
            if (context.desempenos.Where(d => d.Periodo == periodo && d.IdAsignatura == idAsignatura).Count() != 0)
                return context.desempenos.Where(d => d.Periodo == periodo && d.IdAsignatura == idAsignatura).Sum(de => de.Porcentaje.HasValue ? de.Porcentaje.Value : 0);
            else
                return 0;
        }

        public desempenos GetbyId(int id)
        {
            throw new NotImplementedException();
        }

        public desempenos GetbyId(Guid id)
        {
            return context.desempenos.FirstOrDefault(d => d.Id == id);
        }

        public void Save(desempenos entidad)
        {
            try
            {
                context.desempenos.AddObject(entidad);
                context.SaveChanges();
            }
            catch (Exception exc)
            {
                Utils.WriteError(this.GetType().Name, exc);
                throw new LUNAExcepcion(ExceptionCode.ERROR_INESPERADO, string.Empty);
            }
        }

        public void Update(desempenos entidad)
        {
            try
            {
                context.desempenos.ApplyChanges(entidad);
                context.SaveChanges();
            }
            catch (Exception exc)
            {
                Utils.WriteError(this.GetType().Name, exc);
                throw new LUNAExcepcion(ExceptionCode.ERROR_INESPERADO, string.Empty);
            }
        }

        public void Delete(desempenos entidad)
        {
            try
            {
                context.desempenos.DeleteObject(entidad);
                context.SaveChanges();
            }
            catch (Exception exc)
            {
                Utils.WriteError(this.GetType().Name, exc);
                throw new LUNAExcepcion(ExceptionCode.ERROR_INESPERADO, string.Empty);
            }
        }
    }
}
